/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Beans;

import Decorator_Pattern.Lanzar_Decorador;
import Decorator_Pattern.bebidas;
import Iterator_Pattern.IteradorOrden;
import java.util.ArrayList;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author Karadak
 */
@ManagedBean
@SessionScoped
public class LoginBean 
{
    private String miBebida;          // cafe seleccionado 
    private String mover;           // nos mueve a travez de las paguinas
    
    private String descripcion;     // descripcion de la bebida
    private String condimento;      // ingrediente agregado a la bebida
    private double precio;          // precio de la bebida
    
    Lanzar_Decorador patron = new Lanzar_Decorador();   // llamada al patron decorator
    bebidas miCafe = null;                              // mi bebida seleccionada 
    
    private ArrayList<String> MiOrden = new ArrayList(); // Para almacenar la orden del cliente
    
    /**
     * Creates a new instance of LoginBean
     */
    public LoginBean() {
    }
    
    /**
     * evento para el boton agregar ingrediente a mi bebida
     * @param ingrediente
     * @param cafe 
     */
    public void agregar_condimento(String ingrediente, bebidas cafe)
    {
        this.miCafe = this.patron.Mesclando(ingrediente, miCafe);
        
        this.setDescripcion(this.miCafe.getDescripcion());
        this.setPrecio(this.miCafe.precio());   
    }
    
    /***
     * metodo que me devuelve a la pagina de ingredientes
     * @return 
     */
    public String addCondimento()
    {
        String respuesta;

        try
        {            
            this.agregar_condimento(this.condimento, this.miCafe);
            this.MiOrden.add(this.condimento);
            respuesta = "condimentos";           
        }
        catch(Exception er)
        {
            System.out.println("Error en agregar ingrediente: "+er.getMessage());
            mover = "Error en agregar ingrediente: "+er.getMessage();
            respuesta = "error";
        }
        return respuesta;
    }
    
    public String verMiOrden()
    {
        return "orden";
    }
    
    /**
     * metodo del boton para seleccionar una bebida
     * @return 
     */
    public String SeleccionarBebida()
    {
        String respuesta;

        this.MiOrden.clear();
        
        try
        {            
            initPatron(this.getMiBebida());
            this.MiOrden.add(this.getMiBebida());
            
            respuesta = "opciones";          
        }
        catch(Exception er)
        {
            System.out.println("Error en seleccionar bebida: "+er.getMessage());
            mover = "Error en seleccionar bebida "+er.getMessage();
            
            respuesta = "error";
        }
        return respuesta;
    }
    
    /**
     * Metodo que hace uso del patron ITERATOR para mostrar el pedido del cliente
     * @return 
     */    
    public String factura()
    {      
        IteradorOrden buscar = new IteradorOrden(this.MiOrden);
        
        String salida = "<h1><br>"+ buscar.siguiente() + "</br></h1>";
        
        while(buscar.tieneElementos())
        {
            salida += "<h2><br>"+ buscar.siguiente() +"</br></h2>";
        }
        
     
        return salida ;
    }
    /**
     * metodo para iniciar el patron decorator
     * @param opcion 
     */
    public void initPatron(String opcion)
    {
        //bebidas miCafe = this.patron.creando(this.getMiBebida());
        miCafe = this.patron.creando(this.getMiBebida());
        
        this.setDescripcion(miCafe.getDescripcion());
        this.setPrecio(miCafe.precio());
        
    }
    
    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public double getPrecio() {
        return precio;
    }

    public void setPrecio(double precio) {
        this.precio = precio;
    }
    
    public String getCondimento() {
        return condimento;
    }

    public void setCondimento(String condimento) {
        this.condimento = condimento;
    }
    
    public String getMiBebida() {
        System.out.println("get "+miBebida);
        return miBebida;
    }

    public void setMiBebida(String miBebida) {
        this.miBebida = miBebida;
        System.out.println("set "+miBebida);
    }

    public String getMover() {
        return mover;
    }

    public void setMover(String mover) {
        this.mover = mover;
    }
}
